<?php
class Contract extends ActiveRecord {
	
	protected $tableName = 'contract';
	public $pkName = 'ID_contract';
	
	protected $arrSettings = array(
			'created_at' => true,  // в БД храним время создания
			'updated_at' => true, 	// в БД храним время редактирования
			'author' => true			// в БД храним автора (ID_user)
	);
	public $validatesLengthOf = array(
			'contract_name' => array('minimum' => 1, 'maximum' => 512, 'message' => 'Имя договора обязательно'),
			'contract_description' => array('minimum' => 1, 'message' => 'Описание договора обязательно'),
			'first_name' => array('minimum' => 1, 'maximum' => 64, 'message' => 'Слишком короткое имя'),
		  	'last_name' => array('minimum' => 1, 'maximum' => 64, 'message' => 'Слишком короткая фамилия'),
			'middle_name' => array('minimum' => 1, 'maximum' => 64, 'message' => 'Слишком короткое отчество'),
			'deadline' => array ('minimum' => 1, 'maximum' => 3, 'message' => 'От 1 до 999 дней')
	);
	
	public function getContractInfo($userType){
		Service_Debug::setDebug();
		$objDB = Service_Database::instance();
		$field = $userType == 'master' ? '`ID_master`' : '`ID_user`';
		$stmt = "SELECT `user`.`first_name`,`user`.`last_name`,`user`.`ID_user`
		FROM  `contract`
		INNER JOIN  `user`
		ON `contract`." . $field . " = `user`.`ID_user`
		WHERE `contract`.`ID_contract`='" . $this->id . "'";
		$arrInfo = $objDB->selectOne($stmt);
		return $arrInfo;
	}
	
	// Проверяет может ли текущий пользователь оставить отзыв мастеру по договору 
	public function checkToAddResponse($objContract, $objUser) {
		Service_Debug::setDebug();
		$objDB = Service_Database::instance();
		$stmt = "SELECT `contract_response`.`ID_contract_response`,`contract_response`.`text`,`contract_response`.`created_at`,`contract_response`.`is_read` FROM `contract_response` WHERE `contract_response`.`ID_contract`='" . $objContract->id . "'";
		$result = $objDB->selectOne($stmt);
		if($result) return $result;
		if (!$result && $objContract->getField('status') == '1' && $objUser->getField('user_type') == 'customer') return false;
		elseif(!$result) return true;
	}
	
	public function afterSave() {
		// Увеличиваем счётчик неподписанных договоров у мастера, кому адресован текущий договор
		User_User::changeNumber('+','contractEvents', $this->getField('ID_master'));
	}
	
	// Функция отмечает текущий договор, как просмотренный заказчиком
	public function makeReadByCustomer() {
		Service_Debug::setDebug();
		$objDB = Service_Database::instance();
		// Отмечаем договор "прочитанным"
		$this->updateField('is_read_by_customer', 1);
		// Получаем id заказчика и уменьшаем его счётчик новых событий по договорам на 1
		User_User::changeNumber('-','contractEvents', $this->getField('ID_user'));
	}
}
?>